import os
import shutil
import tkinter as tk
from tkinter import filedialog, messagebox
##############################
import basicConfig
from src import logPro

# 临时文件夹
temp_files_dir = basicConfig.TEMP_FILE_DIR
# 默认文件保存目录
files_down_dir = basicConfig.SAVE_FILE_DIR


class FileDownloader:
    def __init__(self):
        self.root = tk.Tk()
        self.root.withdraw()  # 隐藏主窗口

    def check_temp_files(self):
        # 检查临时文件夹内是否有文件
        temp_files = [f for f in os.listdir(temp_files_dir) if os.path.isfile(os.path.join(temp_files_dir, f))]
        if not temp_files:
            logPro.produce_logs('info', '没有可保存的文件')
            messagebox.showinfo('提示', '没有可保存的文件')
            return

        # 打开文件对话框，让用户选择要保存的文件
        selected_files = filedialog.askopenfilenames(initialdir=temp_files_dir, title='选择要保存的文件')
        if not selected_files:
            logPro.produce_logs('info', '未选择任何文件')
            return

        # 用户选择保存位置
        save_dir = filedialog.askdirectory(initialdir=files_down_dir, title='选择保存位置')
        if not save_dir:
            save_dir = files_down_dir  # 默认保存目录
            logPro.produce_logs('info', f'用户未选择保存位置，将文件保存到默认目录: {save_dir}')

        # 复制文件
        self.copy_files(selected_files, save_dir)

    def copy_files(self, selected_files, save_dir):
        for file_path in selected_files:
            file_name = os.path.basename(file_path)
            destination_path = os.path.join(save_dir, file_name)
            try:
                shutil.copy2(file_path, destination_path)
                logPro.produce_logs('info', f'{file_name} 已保存到 {save_dir}')
            except Exception as e:
                logPro.produce_logs('error', f'复制文件 {file_name} 时发生错误: {e}')
                messagebox.showerror('错误', f'复制文件 {file_name} 时发生错误: {e}')
        messagebox.showinfo('提示', f'文件已保存到 {save_dir}')

    def run(self):
        self.check_temp_files()
